home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / v7n16.arc / NEWNODE.ASM < prev    next >
Assembly Source File  |  1988-09-13  |  5KB  |  188 lines

  1. ;----------------------------------------------------------------------
  2. ;  NewNode.ASM -- Node finder for NetWare
  3. ;  Syntax: NEWNODE
  4. ;  Results:
  5. ;  If the NetWare shell is loaded, display the 12 byte station address
  6. ;  in hexadecimal and  display the last two bytes in decimal.
  7. ;
  8. ;  Return <= 255 with physical node address (normally set on the card)
  9. ;  Return 1 if NetWare shell is not active or if the logical connection
  10. ;  is 0 (means you're running on a Non-Dedicated server)
  11. ;----------------------------------------------------------------------
  12. CSEG          Segment
  13.               Assume  CS:CSEG,DS:CSEG
  14.               Org     100h
  15.  
  16. Entry:        JMP     Begin
  17.         DB      " NewNode (c) 1987 Jeffrey Diehl "
  18.         DB      "Released to the Public Domain"
  19.         DB      "Syntax: NewNode  "
  20.         DB      "Output: Prints the 12-digit Hexadecimal"
  21.         DB      " address of the workstation, then"
  22.         DB      " converts the last two digits to"
  23.         DB      " decimal."
  24.         DB      "   The DOS IF ERRORLEVEL batch command"
  25.         DB      " can use the return to branch."
  26. CX4        DW      ?
  27. BX4        DW      ?
  28. AX4        DW      ?
  29. PNODE        DB      "The Node Address of this workstation"
  30.         DB      " is",0Dh,0Ah,"$"
  31. HEXA        DB      " Hexadecimal, or $"
  32. DECI        DB      " Decimal.  $"
  33. OOPS        DB      "OOPS! The NetWare shell returned a 0,"
  34.         DB      " so you either don't have the shell loaded"
  35.         DB      " or you are at a non-dedicated server,"
  36.         DB      " or you don't have a network card!"
  37. CRLF        DB      0Dh,0Ah,"$"
  38. GETSTN        EQU     0DCh    ;represents get station call to Novell
  39. GETNWAD        EQU     0EEh    ;represents get node address call to Novell
  40.  
  41. PRTCHR        EQU     02h      ;print character dos call
  42. PRTSTR        EQU     09h      ;print string dos call
  43. DOS        EQU     21h
  44.  
  45. ;  Set up a CRLF to the CRT
  46. BEGIN:
  47.         MOV     DX,OFFSET CRLF
  48.         MOV     AH,PRTSTR
  49.         INT     DOS
  50.  
  51. ;  Send the first line to the CRT
  52.  
  53.         MOV     DX,OFFSET PNODE
  54.         MOV     AH,PRTSTR
  55.         INT     DOS
  56.  
  57. ;  See if the NetWare shell is active
  58.  
  59.         MOV     AH,GETSTN        ;call to Novell shell for status
  60.                                          ;put return code into AL
  61.         INT     DOS
  62.  
  63.         CMP     AL,0             ;compare return code
  64.         JA      GET_ADDR         ;jump above to get_addr
  65. No_NET:
  66.         MOV     DX,Offset OOPS ;display error message
  67.         MOV     AX4,1
  68.         MOV     AH,PRTSTR
  69.         INT     DOS
  70.         JMP     XOUT             ;get out of program
  71.  
  72. ;  Get the Address from the NetWare Shell
  73.  
  74. GET_ADDR:
  75.         MOV     AH,GETNWAD       ;call to Novell shell for address
  76.         INT     DOS
  77.  
  78. ;  Now store off the address before messing with it
  79.  
  80.         MOV     AX4,AX
  81.         MOV     BX4,BX
  82.         MOV     CX4,CX
  83.  
  84. ;  But First check if NetWare returned ok address.  If last two chars are 0,
  85. ;  then check if last 8 chars are 0, just to be certain.
  86.  
  87.         CMP     AX,0
  88.         JA      NET_OK
  89.         MOV     AX,BX
  90.         CMP     AX,0
  91.         JA      NET_OK
  92. No_ADDR:
  93.         MOV     DX,Offset OOPS   ;display error message
  94.         MOV     AX4,1
  95.         MOV     AH,PRTSTR
  96.         INT     DOS
  97.         JMP     XOUT             ;get out of program
  98.  
  99. ;  Send the hex chars to the CRT four at a time.
  100. NET_OK:
  101.         MOV     AX,CX4
  102.         CALL    HEX4PRN
  103.  
  104.         MOV     AX,BX4
  105.         CALL    HEX4PRN
  106.  
  107.         MOV     AX,AX4
  108.         CALL    HEX4PRN
  109.  
  110. ;  Send the Hexa message to the CRT
  111.  
  112.         MOV     DX,OFFSET HEXA
  113.         MOV     AH,PRTSTR
  114.         INT     DOS
  115.  
  116. ;  Convert the last two digits to decimal for message
  117.  
  118.         SUB     AX,AX   ;Clear the accumulator
  119.         MOV     AX,AX4  ;Put the last four hex into AL
  120.         AND     AX,0FFh ; but only keep last two
  121.         MOV     BL,100  ;Byte divisor
  122.         DIV     BL
  123.         MOV     CH,AH   ;Keep remainder from AH
  124.         ADD     AL,'0'  ; convert to ASCII
  125.         CALL    PRINTIT ;quotient in AL
  126.  
  127.         MOV     AL,CH   ;Get remainder back
  128.         AND     AX,0FFh
  129.         MOV     BL,10
  130.         DIV     BL
  131.         MOV     CH,AH   ;Keep remainder from AH
  132.         ADD     AL,"0"
  133.         CALL    PRINTIT
  134.  
  135.         MOV     AL,CH   ;Get remainder back
  136.         ADD     AL,"0"
  137.         CALL    PRINTIT ; and print it
  138.  
  139. ;  Send the Decimal message to the CRT
  140.  
  141.         MOV     DX,OFFSET DECI
  142.         MOV     AH,PRTSTR
  143.         INT     DOS
  144.  
  145. ;  Set up a CRLF to the CRT
  146.  
  147.         MOV     DX,OFFSET CRLF
  148.         MOV     AH,PRTSTR
  149.         INT     DOS
  150.  
  151. ;  Now get out!  Leave the DOS IF ERRORLEVEL value intact
  152.  
  153. XOUT:
  154.         MOV     AX,AX4
  155.         MOV     AH,4Ch
  156.         INT     DOS
  157.  
  158. ;  Sub-Routines
  159. ;  Convert Hex character in AX to ASCII
  160.  
  161. HEX4PRN:
  162.         MOV     BX,AX
  163.         MOV     CL,04
  164.         MOV     CH,04
  165. XLOOP:
  166.         ROL     BX,CL            ;rotate left 4 bits
  167.         MOV     AL,BL
  168.         AND     AL,0Fh           ;mask upper 4 bits
  169.         ADD     AL,90h
  170.         DAA                      ;decimal adjust for addition
  171.         ADC     AL,40h
  172.         DAA
  173.         CALL PRINTIT
  174.         DEC     CH
  175.         JNZ     XLOOP
  176.         RET
  177.  
  178. ;  Single Character print AL=Char
  179.  
  180. PRINTIT:
  181.         MOV     DL,AL
  182.         MOV     AH,PRTCHR
  183.         INT     DOS
  184.         RET
  185.  
  186. CSEG        ENDS
  187.         END     Entry
  188.